【小ネタ】 AWS Systems ManagerのAWS-RunShellScriptで遠隔地のRaspberryPiをシャットダウンする
1 はじめに
CX事業本部の平内(SIN)です。
RaspberryPiのシャットダウンを電源OFFで行うのは、リクスのある作業となります。しかし、ディスプレイやキーボードが接続されていない、多数のRaspberryPiがある場合、これををシャットダウンするのは、やや面倒です。
今回は、遠隔地にある多数のRaspberryPiをAWS Systems Manager(以下、SSM)のエージェントにより、AWS CLIでシャットダウンする作業を確認してみました。
2 環境
既にSSMエージェントがインストールされアクティベーションが終わっている環境が前提です。
参考:AWS Systems ManagerをRaspberry Piで使用してみた
下記のように、5台のRaspberryPiがオンラインとなっています。
3 AWS-RunShellScript
AWS-RunShellScriptでコマンドを実行するには、aws ssm send-commandを使用します。
参考:Walkthrough: Use the AWS CLI with Run Command
RaspberryPiのシャットダウンコマンドは、下記のように利用されますが、AWS-RunShellScriptはroot権限で実行されるため、sudoは必要ありません。
pi@raspberrypi:~ $ sudo shutdown -h now
4 シェル
AWS CLIを実行するシェルスクリプトです。idsに対象となるインスタンスIDを列挙して使用します。
raspi-shoutdown.sh
#!/bin/bash ids=( "mi-0b1bf21cb921d30c3" "mi-05fc7778a79f6af73" "mi-0ff983b55d321d1ba" "mi-0ac1df76fe0f72153" "mi-088cb4680de05f836" ) cmd="shutdown -h now" profile=profileName region=ap-northeast-1 for id in ${ids[@]};do echo Instance $id param={"\"commands\"":[\"$cmd\"],"\"executionTimeout\"":["\"3600\""]} aws ssm send-command --document-name "AWS-RunShellScript" --instance-ids $id --parameters "$param" --timeout-seconds 600 --region $region --p $profile | jq .Command.CommandId done
実行している様子です。インスタンスIDとコマンドIDが出力されています。
% ./raspi-shoutdown.sh mi-0b1bf21cb921d30c3 "a1187563-1c31-49eb-b0ae-3be79526240b" mi-05fc7778a79f6af73 "f17b29ee-2706-4291-bbf2-11da79e5b3a6" mi-0ff983b55d321d1ba "b3c9a3aa-6bd1-dfae-5e96-9a7034747922" mi-0ac1df76fe0f72153 "799458c7-0d77-611d-6669-2ba41b7e201b" mi-088cb4680de05f836 "5d115928-8460-fa88-fe3c-a96a1b7aee98"
5 最後に
今回は、遠隔地で多数運用されているRaspberryPiのシャットダウンを、SSMのエージェントにより実施する要領を試してみました。 とりあえず、離れた場所にあるRaspberryPiには、SSM入れとくと何かと便利かもしれません。